/*** Created Time: 2022年6月23日 21:44:59 ***/
/*** Author: Eric                        ***/

#ifndef _MY_FIFO_H_
#define _MY_FIFO_H_

#include <onix/types.h>

// 循环队列
typedef struct fifo_t
{
    char *buf;  // 循环队列缓冲区，只能存储 char 型
    u32 length; // 缓冲区长度
    u32 head;   // 头部指针偏移量
    u32 tail;   // 尾部指针偏移量
} fifo_t;

// 初始化循环队列
void fifo_init(fifo_t *fifo, char *buf, u32 length);
// 判断循环队列是否已满
bool fifo_full(fifo_t *fifo);
// 判断循环队列是否为空
bool fifo_empty(fifo_t *fifo);
// 取出循环队列中元素
char fifo_get(fifo_t *fifo);
// 向循环队列中插入元素
void fifo_put(fifo_t *fifo, char byte);

#endif